package src;
import java.util.Arrays;

public class GeneratorWithRepetition {
    /**
     * Pole v ktorom generujeme variacie
     */
    private int[] pole;

    /**
     * Urcuje velkost mnoziny, z ktorej vytvarame variacie bez opakovania ({1,
     * ..., n})
     */
    private int n;

    private void vypis() {
    	System.out.println(Arrays.toString(pole));
    }

    private void generuj(int odIndexu) {
        // Ak sme vygenerovali vsetky hodnoty v poli, tak pole vypiseme
        if (odIndexu == pole.length) {
            vypis();
            return;
        }

    	for (int i = 0; i <= n; i++) {
            // Cislo i ulozime do pola
            pole[odIndexu] = i;
            // Generujeme variacie s opakovanim od indexu odIndexu+1
            generuj(odIndexu + 1);                    
        }
    }

    public void generuj() {
    	generuj(0);
    }

    public GeneratorWithRepetition(int n, int k) {
        // Ulozime si parameter n
        this.n = n;
        // Vytvorime pole, do ktoreho budeme generovat variacie
        pole = new int[k];
    }

    public static void main(String[] args) {
	    GeneratorWithRepetition g1 = new GeneratorWithRepetition(2, 2);
	    g1.generuj();
	    System.out.println();
	    GeneratorWithRepetition g2 = new GeneratorWithRepetition(2, 2);
	    g2.generuj();
    }
}